from typing import TypedDict, Literal, Optional, Union

# HumanInterruptConfig：定义人工中断操作的配置选项。
class HumanInterruptConfig(TypedDict):
    allow_ignore: bool  # allow_ignore：布尔值，是否允许用户忽略中断。
    allow_respond: bool # allow_respond：布尔值，是否允许用户发送自由格式的响应。
    allow_edit: bool    # allow_edit：布尔值，是否允许用户编辑操作参数。
    allow_accept: bool  # allow_accept：布尔值，是否允许用户按原样接受操作。


# ActionRequest：定义向人类请求的操作。
class ActionRequest(TypedDict):
    action: str      # action：字符串，操作的描述性名称或标题。
    args: dict       # args：字典，与操作关联的参数（例如，工具调用参数）。


# HumanInterrupt：表示人工中断请求的主要模式。
class HumanInterrupt(TypedDict):
    action_request: ActionRequest         # action_request：ActionRequest，有关请求操作的详细信息。
    config: HumanInterruptConfig         # config：HumanInterruptConfig，人工响应的配置选项。
    description: Optional[str]          # description：可选字符串，中断的详细描述，可以是 Markdown 格式。


# HumanResponse：从 Agent Inbox UI 接收的人工响应模式。
class HumanResponse(TypedDict):
    type: Literal['accept', 'ignore', 'response', 'edit'] # type：Literal String，来自用户的响应类型（accept、ignore、response、edit）。
    args: Union[None, str, ActionRequest]                # args：Union[None, String, ActionRequest]，与响应关联的参数，根据"type"而变化。
                                                        #     - 对于"accept"和"edit"：ActionRequest，其中包含可能已修改的参数。
                                                        #     - 对于"response"：包含用户文本响应的字符串。
                                                        #     - 对于"ignore"：None。